import logging
import os
import requests
import numpy as np

def configure_logging():
    # 获取当前脚本所在目录
    current_dir = os.path.dirname(os.path.abspath(__file__))
    # 拼接日志文件的绝对路径
    log_file_path = os.path.join(current_dir, "log.log")
    
    # 配置日志
    logging.basicConfig(
        filename=log_file_path,
        level=logging.INFO,
        format="%(asctime)s - %(levelname)s - %(message)s",
        encoding="utf-8"
    )
    return logging

logging = configure_logging()

def get_embedding(input_text):
    url = "https://api.siliconflow.cn/v1/embeddings"
    
    payload = {
        "input": input_text,
        "encoding_format": "float",
        "model": "BAAI/bge-large-zh-v1.5"
    }
    headers = {
        "Authorization": "Bearer sk-pusgnznrckhdogxrchddbfzrypvljzjdydjogvnfbprehtkj",
        "Content-Type": "application/json"
    }
    
    # 发送 POST 请求
    response = requests.request("POST", url, json=payload, headers=headers)
    
    # 将响应内容解析为 JSON 格式并保存到变量 data
    json_data = response.json()
    emb = json_data['data'][0]['embedding']
    
    return emb

def cosine_similarity(vec1, vec2):
    """
    计算两个向量之间的余弦相似度
    :param vec1: 第一个向量
    :param vec2: 第二个向量
    :return: 余弦相似度值
    """
    dot_product = np.dot(vec1, vec2)
    norm_vec1 = np.linalg.norm(vec1)
    norm_vec2 = np.linalg.norm(vec2)
    return dot_product / (norm_vec1 * norm_vec2)

def cosine_similarity_2(vec1, vec2):
    """
    计算两个向量之间的余弦相似度,因为bge模型的输出的向量的模长=1，所以直接点乘就好了
    :param vec1: 第一个向量
    :param vec2: 第二个向量
    :return: 余弦相似度值
    """
    dot_product = np.dot(vec1, vec2)
    return dot_product

def validate_embedding_norm(embedding_vector):
    """
    验证嵌入向量的 2 范数是否为 1
    :param embedding_vector: 嵌入向量
    :return: 嵌入向量的 2 范数
    """
    # 修改为计算 2 范数
    return np.linalg.norm(embedding_vector)

if __name__ == "__main__":
    emb = get_embedding("前期武切维奇五千万")
    print(validate_embedding_norm(emb))